/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.beans;
import java.awt.Dialog;
import java.util.ResourceBundle;
import java.text.MessageFormat;
import javax.swing.border.TitledBorder;
import org.openide.util.Utilities;
import org.openide.util.NbBundle;
import org.openide.src.Type;
import org.openide.TopManager;
import org.openide.NotifyDescriptor;
/** Customizer for new Property Pattern
*
* @author Petr Hrebejk
*/
public class PropertyPatternPanel extends javax.swing.JPanel
implements java.awt.event.ActionListener {
/** The resource bundle */
private static final ResourceBundle bundle = NbBundle.getBundle( PropertyPatternPanel.class );
/** Dialog for displaiyng this panel */
private Dialog dialog = null;
/** Group node under which the new pattern will below */
private PatternGroupNode groupNode;
/** Geneartion for interface/class */
private boolean forInterface = false;
/** Default types */
private final String[] types = new String[] {
"boolean", "char", "byte", "short", "int", // NOI18N
"long", "float", "double", "String" // NOI18N
};
/** Human readable values of modes */
private final String[] modes = new String[] {
bundle.getString( "LAB_ReadWriteMODE" ),
bundle.getString( "LAB_ReadOnlyMODE" ),
bundle.getString( "LAB_WriteOnlyMODE" )
};
/** Generated UID */
static final long serialVersionUID =4959196907494713555L;
/** Initializes the Form */
public PropertyPatternPanel() {
initComponents ();
// Customize type checkbox
for ( int i = 0; i < types.length; i++ ) {
typeComboBox.addItem( types[i] );
}
typeComboBox.setSelectedItem( "" ); // NOI18N
// Customize mode checkbox
for ( int i = 0; i < modes.length; i++ ) {
modeComboBox.addItem( modes[i] );
}
modeComboBox.setSelectedItem( modes[0] );
// i18n
((TitledBorder)propertyPanel.getBorder()).setTitle(
bundle.getString( "CTL_PropertyPanel_propertyPanel" ) );
((TitledBorder)optionsPanel.getBorder()).setTitle(
bundle.getString( "CTL_PropertyPanel_optionsPanel" ) );
nameLabel.setText( bundle.getString( "CTL_PropertyPanel_nameLabel" ) );
typeLabel.setText( bundle.getString( "CTL_PropertyPanel_typeLabel" ) );
modeLabel.setText( bundle.getString( "CTL_PropertyPanel_modeLabel" ) );
boundCheckBox.setText( bundle.getString( "CTL_PropertyPanel_boundCheckBox" ) );
constrainedCheckBox.setText( bundle.getString( "CTL_PropertyPanel_constrainedCheckBox" ) );
fieldCheckBox.setText( bundle.getString( "CTL_PropertyPanel_fieldCheckBox" ) );
returnCheckBox.setText( bundle.getString( "CTL_PropertyPanel_returnCheckBox" ) );
setCheckBox.setText( bundle.getString( "CTL_PropertyPanel_setCheckBox" ) );
supportCheckBox.setText( bundle.getString( "CTL_PropertyPanel_supportCheckBox" ) );
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents () {//GEN-BEGIN:initComponents
mainPanel = new javax.swing.JPanel ();
propertyPanel = new javax.swing.JPanel ();
nameLabel = new javax.swing.JLabel ();
nameTextField = new javax.swing.JTextField ();
typeLabel = new javax.swing.JLabel ();
typeComboBox = new javax.swing.JComboBox ();
modeLabel = new javax.swing.JLabel ();
modeComboBox = new javax.swing.JComboBox ();
jPanel3 = new javax.swing.JPanel ();
boundCheckBox = new javax.swing.JCheckBox ();
jPanel4 = new javax.swing.JPanel ();
constrainedCheckBox = new javax.swing.JCheckBox ();
optionsPanel = new javax.swing.JPanel ();
fieldCheckBox = new javax.swing.JCheckBox ();
returnCheckBox = new javax.swing.JCheckBox ();
setCheckBox = new javax.swing.JCheckBox ();
supportCheckBox = new javax.swing.JCheckBox ();
setLayout (new java.awt.BorderLayout ());
mainPanel.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints1;
mainPanel.setBorder (new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5)));
propertyPanel.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints2;
propertyPanel.setBorder (new javax.swing.border.TitledBorder(
new javax.swing.border.EtchedBorder(java.awt.Color.white, new java.awt.Color (149, 142, 130)),
"propertyPanel", 1, 2, new java.awt.Font ("Dialog", 0, 11), java.awt.Color.black)); // NOI18N
nameLabel.setText ("nameLabel"); // NOI18N
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.insets = new java.awt.Insets (2, 6, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (nameLabel, gridBagConstraints2);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints2.insets = new java.awt.Insets (2, 2, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (nameTextField, gridBagConstraints2);
typeLabel.setText ("typeLabel"); // NOI18N
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.insets = new java.awt.Insets (2, 6, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (typeLabel, gridBagConstraints2);
typeComboBox.setEditable (true);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints2.insets = new java.awt.Insets (2, 2, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (typeComboBox, gridBagConstraints2);
modeLabel.setText ("modeLabel"); // NOI18N
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.insets = new java.awt.Insets (2, 6, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (modeLabel, gridBagConstraints2);
modeComboBox.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
modeComboBoxActionPerformed (evt);
}
}
);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints2.insets = new java.awt.Insets (2, 2, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (modeComboBox, gridBagConstraints2);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
propertyPanel.add (jPanel3, gridBagConstraints2);
boundCheckBox.setText ("boundCheckBox"); // NOI18N
boundCheckBox.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
boundCheckBoxActionPerformed (evt);
}
}
);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.insets = new java.awt.Insets (2, 2, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (boundCheckBox, gridBagConstraints2);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
propertyPanel.add (jPanel4, gridBagConstraints2);
constrainedCheckBox.setText ("constrainedCheckBox"); // NOI18N
constrainedCheckBox.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
constrainedCheckBoxActionPerformed (evt);
}
}
);
gridBagConstraints2 = new java.awt.GridBagConstraints ();
gridBagConstraints2.gridwidth = 0;
gridBagConstraints2.insets = new java.awt.Insets (2, 2, 2, 2);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
propertyPanel.add (constrainedCheckBox, gridBagConstraints2);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 1.0;
mainPanel.add (propertyPanel, gridBagConstraints1);
optionsPanel.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints3;
optionsPanel.setBorder (new javax.swing.border.TitledBorder(
new javax.swing.border.EtchedBorder(java.awt.Color.white, new java.awt.Color (149, 142, 130)),
"optionsPanel", 1, 2, new java.awt.Font ("Dialog", 0, 11), java.awt.Color.black)); // NOI18N
fieldCheckBox.setText ("fieldCheckBox"); // NOI18N
fieldCheckBox.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
fieldCheckBoxActionPerformed (evt);
}
}
);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.insets = new java.awt.Insets (2, 4, 2, 4);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
optionsPanel.add (fieldCheckBox, gridBagConstraints3);
returnCheckBox.setText ("returnCheckBox"); // NOI18N
returnCheckBox.setEnabled (false);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.insets = new java.awt.Insets (2, 4, 2, 4);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
optionsPanel.add (returnCheckBox, gridBagConstraints3);
setCheckBox.setText ("setCheckBox"); // NOI18N
setCheckBox.setEnabled (false);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.insets = new java.awt.Insets (2, 4, 2, 4);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
optionsPanel.add (setCheckBox, gridBagConstraints3);
supportCheckBox.setText ("supportCheckBox"); // NOI18N
supportCheckBox.setEnabled (false);
gridBagConstraints3 = new java.awt.GridBagConstraints ();
gridBagConstraints3.gridwidth = 0;
gridBagConstraints3.insets = new java.awt.Insets (2, 4, 2, 4);
gridBagConstraints3.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints3.weightx = 1.0;
gridBagConstraints3.weighty = 1.0;
optionsPanel.add (supportCheckBox, gridBagConstraints3);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 1.0;
mainPanel.add (optionsPanel, gridBagConstraints1);
add (mainPanel, java.awt.BorderLayout.CENTER);
}//GEN-END:initComponents
private void fieldCheckBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fieldCheckBoxActionPerformed
protectControls();
}//GEN-LAST:event_fieldCheckBoxActionPerformed
private void constrainedCheckBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_constrainedCheckBoxActionPerformed
protectControls();
}//GEN-LAST:event_constrainedCheckBoxActionPerformed
private void boundCheckBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_boundCheckBoxActionPerformed
protectControls();
}//GEN-LAST:event_boundCheckBoxActionPerformed
private void modeComboBoxActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modeComboBoxActionPerformed
protectControls();
}//GEN-LAST:event_modeComboBoxActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel mainPanel;
private javax.swing.JPanel propertyPanel;
private javax.swing.JLabel nameLabel;
private javax.swing.JTextField nameTextField;
private javax.swing.JLabel typeLabel;
private javax.swing.JComboBox typeComboBox;
private javax.swing.JLabel modeLabel;
private javax.swing.JComboBox modeComboBox;
private javax.swing.JPanel jPanel3;
private javax.swing.JCheckBox boundCheckBox;
private javax.swing.JPanel jPanel4;
private javax.swing.JCheckBox constrainedCheckBox;
private javax.swing.JPanel optionsPanel;
private javax.swing.JCheckBox fieldCheckBox;
private javax.swing.JCheckBox returnCheckBox;
private javax.swing.JCheckBox setCheckBox;
private javax.swing.JCheckBox supportCheckBox;
// End of variables declaration//GEN-END:variables
class Result {
String name;
String type;
int mode = PropertyPattern.READ_WRITE;
boolean bound = false;
boolean constrained = false;
boolean withField = false;
boolean withReturn = false;
boolean withSet = false;
boolean withSupport = false;
}
PropertyPatternPanel.Result getResult( ) {
Result result = new Result();
result.name = nameTextField.getText();
result.type = typeComboBox.getEditor().getItem().toString();
if ( modeComboBox.getSelectedItem().toString().equals( modes[1] ) )
result.mode = PropertyPattern.READ_ONLY;
else if ( modeComboBox.getSelectedItem().toString().equals( modes[2] ) )
result.mode = PropertyPattern.WRITE_ONLY;
else
result.mode = PropertyPattern.READ_WRITE;
if ( boundCheckBox.isSelected() )
result.bound = true;
if ( constrainedCheckBox.isSelected() )
result.constrained = true;
if ( fieldCheckBox.isSelected() )
result.withField = true;
if ( returnCheckBox.isSelected() )
result.withReturn = true;
if ( setCheckBox.isSelected() )
result.withSet = true;
if ( supportCheckBox.isSelected() )
result.withSupport = true;
return result;
}
/** This method is called when ocuures the possibilty that any
* xontrol should be enabled or disabled.
*/
private void protectControls() {
Result result = getResult();
fieldCheckBox.setEnabled( !forInterface );
returnCheckBox.setEnabled(
( result.mode == PropertyPattern.READ_WRITE ||
result.mode == PropertyPattern.READ_ONLY ) &&
result.withField && !forInterface );
setCheckBox.setEnabled(
( result.mode == PropertyPattern.READ_WRITE ||
result.mode == PropertyPattern.WRITE_ONLY ) &&
result.withField && !forInterface );
supportCheckBox.setEnabled( (result.bound || result.constrained) && !forInterface );
}
void setDialog( Dialog dialog ) {
this.dialog = dialog;
}
void setForInterface( boolean forInterface ) {
this.forInterface = forInterface;
protectControls();
}
void setGroupNode( PatternGroupNode groupNode ) {
this.groupNode = groupNode;
}
public void actionPerformed( java.awt.event.ActionEvent e ) {
if ( dialog != null ) {
//System.out.println( e );
//if ( e.getActionCommand().equals( "OK" ) ) { // NOI18N
if ( e.getSource() == org.openide.DialogDescriptor.OK_OPTION ) {
//Test wether the string is empty
if ( typeComboBox.getEditor().getItem().toString().trim().length() <= 0) {
TopManager.getDefault().notify(
new NotifyDescriptor.Message(
bundle.getString("MSG_Not_Valid_Type"),
NotifyDescriptor.ERROR_MESSAGE) );
typeComboBox.requestFocus();
return;
}
if ( !Utilities.isJavaIdentifier( nameTextField.getText() ) ) {
TopManager.getDefault().notify(
new NotifyDescriptor.Message(
bundle.getString("MSG_Not_Valid_Identifier"),
NotifyDescriptor.ERROR_MESSAGE) );
nameTextField.requestFocus();
return;
}
// Test wheter property with this name already exists
if ( groupNode.propertyExists( nameTextField.getText() ) ) {
String msg = MessageFormat.format( bundle.getString("MSG_Property_Exists"),
new Object[] { nameTextField.getText() } );
TopManager.getDefault().notify(
new NotifyDescriptor.Message( msg, NotifyDescriptor.ERROR_MESSAGE) );
nameTextField.requestFocus();
return;
}
try {
Type.parse( typeComboBox.getEditor().getItem().toString() );
}
catch ( IllegalArgumentException ex ) {
TopManager.getDefault().notify(
new NotifyDescriptor.Message(
bundle.getString("MSG_Not_Valid_Type"),
NotifyDescriptor.ERROR_MESSAGE) );
typeComboBox.requestFocus();
return;
}
dialog.setVisible( false );
dialog.dispose();
}
else if ( e.getSource() == org.openide.DialogDescriptor.CANCEL_OPTION ) {
dialog.setVisible( false );
dialog.dispose();
}
}
}
}
/*
* Log
* 11 Gandalf 1.10 1/13/00 Petr Hrebejk i18n mk3
* 10 Gandalf 1.9 1/12/00 Petr Hrebejk i18n
* 9 Gandalf 1.8 1/4/00 Petr Hrebejk Various bugfixes - 5036,
* 5044, 5045
* 8 Gandalf 1.7 11/10/99 Petr Hrebejk Canged to work with
* DialogDescriptor.setClosingOptions()
* 7 Gandalf 1.6 11/10/99 Petr Hrebejk Resize behavior in
* property panel fixed
* 6 Gandalf 1.5 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 5 Gandalf 1.4 9/13/99 Petr Hrebejk Creating multiple
* Properties/EventSet with the same name vorbiden. Forms made i18n
* 4 Gandalf 1.3 8/9/99 Ian Formanek Generated Serial Version
* UID
* 3 Gandalf 1.2 7/21/99 Petr Hrebejk Bug fixes interface
* bodies, is for boolean etc
* 2 Gandalf 1.1 7/9/99 Petr Hrebejk Factory chaining fix
* 1 Gandalf 1.0 6/28/99 Petr Hrebejk
* $
*/